import axios from 'axios';
import { message } from 'antd';

export const MethodType = {
  GET: 'GET',
  POST: 'POST',
  PUT: 'PUT',
  DELETE: 'DELETE',
  HEAD: 'HEAD',
};

// const codeMessage = {
//   200: '服务器成功返回请求的数据。',
//   201: '新建或修改数据成功。',
//   202: '一个请求已经进入后台排队（异步任务）。',
//   204: '删除数据成功。',
//   400: '发出的请求有错误，服务器没有进行新建或修改数据的操作。',
//   401: '用户没有权限（令牌、用户名、密码错误）。',
//   403: '用户得到授权，但是访问是被禁止的。',
//   404: '发出的请求针对的是不存在的记录，服务器没有进行操作。',
//   406: '请求的格式不可得。',
//   410: '请求的资源被永久删除，且不会再得到的。',
//   422: '当创建一个对象时，发生一个验证错误。',
//   500: '服务器发生错误，请检查服务器。',
//   502: '网关错误。',
//   503: '服务不可用，服务器暂时过载或维护。',
//   504: '网关超时。',
// };

export let baseURL = 'https://apib.zpzx.cc/'; // 测试更新1
// export let baseURL = 'https://apibgray.zpzx.cc/' // 灰度
// export let baseURL = 'https://apib.zhipeizaixian.com' // 正式更新1

/**
 * 请求
 * @param url 请求地址
 * @param method 请求方式
 * @param params 入参
 * @param header 请求头
 * @returns {Promise<AxiosResponse>}
 */
const baseRequest = (
  url: string,
  method = MethodType.GET,
  params = {},
  header = { Authorization: '' },
) => {
  const data = method == 'GET' ? 'params' : 'data';
  // let token = Cookies.get('token');
  let token = 'klrGyL9MLDSnJtmt8Lkcn7Vy9ekmIIou-1607916427';
  if (token !== undefined && token !== '' && token !== null) {
    header.Authorization = 'Bearer ' + token;
  }
  const request = axios({
    baseURL,
    method,
    url,
    [data]: params,
    headers: {
      'Content-Type': 'application/json',
      ...header,
    },
  });
  return request;
};

/**
 * head请求
 * @param url 请求地址
 * @param params 请求参数
 * @returns {Promise<AxiosResponse>}
 */
export const headData = (url, params = {}) => {
  return baseRequest(url, MethodType.HEAD, params);
};

/**
 * get请求
 * @param url 请求地址
 * @param params 请求参数
 * @returns {Promise<AxiosResponse>}
 */
export const getData = (url, params = {}) => {
  return baseRequest(url, MethodType.GET, params);
};

/**
 * post请求
 * @param url 请求地址
 * @param params 请求地址
 * @returns {Promise<AxiosResponse>}
 */
export const postData = (url, params = {}) => {
  return baseRequest(url, MethodType.POST, params);
};

/**
 * put请求
 * @param url 请求地址
 * @param params 请求地址
 * @returns {Promise<AxiosResponse>}
 */
export const putData = (url, params = {}) => {
  return baseRequest(url, MethodType.PUT, params);
};

/**
 * delete请求
 * @param url 请求地址
 * @param params 请求地址
 * @returns {Promise<AxiosResponse>}
 */
export const deleteData = (url, params = {}) => {
  return baseRequest(url, MethodType.DELETE, params);
};

/**
 * 上传文件请求
 * @param url 请求地址
 * @param param 表单数据{Object}内部必须file键值对
 * @returns {Promise<AxiosResponse>}
 */
export const postFile = (url, param = {}) => {
  let fileData = new FormData();
  for (let key in param) {
    fileData.append(key, param[key]);
  }
  //通过append向form对象添加数据
  return baseRequest(url, MethodType.POST, fileData, {
    'Content-Type': 'multipart/form-data',
  });
};

// 添加请求拦截器
axios.interceptors.request.use(
  function(config) {
    // 在发送请求之前做些什么
    console.log('===============在发送请求之前做些什么=======================');
    return config;
  },
  function(error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  },
);

// 添加响应拦截器
axios.interceptors.response.use(
  function(response) {
    // 对响应数据做点什么
    console.log('===============对响应数据做点什么=======================');
    if (response.status >= 200 && response.status < 300) {
      return Promise.resolve(response);
    } else {
      // return response;
      const data = response.data;
      message.error(data.message);
    }
  },
  function(error) {
    //响应错误处理
    let { data, status } = error.response || {};
    if (data && data.message) {
      message.error(data.message);
    }
    // return Promise.reject(error);
  },
);
